package com.cn.controller.user;

import com.cn.entity.User;
import com.cn.enums.ErrorMsg;
import com.cn.service.UserService;
import com.cn.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * 用户相关控制器
 * 处理用户登录、注册、信息管理等功能
 */
@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户登录
     * @param accountNumber 手机号
     * @param userPassword 密码
     * @param session 会话
     * @return 登录结果
     */
    @PostMapping("login")
    public Result login(@RequestParam("accountNumber") String accountNumber,
                        @RequestParam("userPassword") String userPassword,
                        HttpSession session){
        // 参数校验
        if (accountNumber == null || accountNumber.trim().isEmpty()) {
            return Result.fail(ErrorMsg.PARAM_ERROR);
        }
        if (userPassword == null || userPassword.trim().isEmpty()) {
            return Result.fail(ErrorMsg.PARAM_ERROR);
        }
        
        User user = userService.userLogin(accountNumber, userPassword);
        if (null == user) {
            return Result.fail(ErrorMsg.EMAIL_LOGIN_ERROR);
        }
        session.setAttribute("user", user);
        return Result.success(user);
    }

    /**
     * 用户登出
     * @param session 会话
     * @return 登出结果
     */
    @GetMapping("logout")
    public Result logout(HttpSession session){
        session.removeAttribute("user");
        return Result.success();
    }

    /**
     * 获取用户信息
     * @param id 用户ID
     * @return 用户信息
     */
    @GetMapping("info/{id}")
    public Result getUserInfo(@PathVariable("id") Long id){
        User user = userService.getUser(id);
        if (null == user) {
            return Result.fail(ErrorMsg.PARAM_ERROR);
        }
        // 不返回密码信息
        user.setUserPassword(null);
        return Result.success(user);
    }

    /**
     * 更新用户信息
     * @param user 用户信息
     * @param session 会话
     * @return 更新结果
     */
    @PostMapping("update")
    public Result updateUserInfo(@RequestBody User user, HttpSession session){
        User currentUser = (User) session.getAttribute("user");
        if (null == currentUser) {
            return Result.fail(ErrorMsg.COOKIE_ERROR);
        }
        // 确保只能更新自己的信息
        if (!currentUser.getId().equals(user.getId())) {
            return Result.fail(ErrorMsg.PARAM_ERROR);
        }
        
        if (userService.updateUserInfo(user)) {
            // 更新session中的用户信息
            session.setAttribute("user", userService.getUser(user.getId()));
            return Result.success();
        }
        return Result.fail(ErrorMsg.PARAM_ERROR);
    }
}